import os
from typing import Optional

try:
    from cryptography.fernet import Fernet
except Exception as e:
    Fernet = None  # 延迟依赖，未安装时在调用处抛错


def _get_secret_key() -> str:
    """
    获取用于加解密的密钥（来自环境变量 CONFIG_SECRET_KEY）
    若未配置或库缺失，抛出异常
    """
    if Fernet is None:
        raise RuntimeError('未安装 cryptography，请安装并重试')
    key = os.getenv('CONFIG_SECRET_KEY')
    if not key:
        raise RuntimeError('未配置 CONFIG_SECRET_KEY 环境变量')
    return key


def encrypt_text(plain: Optional[str]) -> Optional[str]:
    """
    加密敏感文本，返回密文
    plain 为空时返回 None
    """
    if plain is None or str(plain).strip() == '':
        return None
    key = _get_secret_key().encode('utf-8')
    f = Fernet(key)
    return f.encrypt(str(plain).encode('utf-8')).decode('utf-8')


def decrypt_text(token: Optional[str]) -> Optional[str]:
    """
    解密密文，返回明文
    token 为空时返回 None
    """
    if token is None or str(token).strip() == '':
        return None
    key = _get_secret_key().encode('utf-8')
    f = Fernet(key)
    return f.decrypt(str(token).encode('utf-8')).decode('utf-8')

